namespace AbstraX.QueryLanguage {
    using ActiproSoftware.Text;
    using ActiproSoftware.Text.Implementation;
    using ActiproSoftware.Windows.Controls.SyntaxEditor.Highlighting;
    using ActiproSoftware.Windows.Controls.SyntaxEditor.Highlighting.Implementation;
    using System;
    using System.Collections.Generic;
    using System.Windows.Media;
    
    
    /// <summary>
    /// Represents a provider of <see cref="IClassificationType"/> objects for the <c>C#</c> language.
    /// </summary>
    /// <remarks>
    /// This type was generated by the Actipro Language Designer tool v11.1.545.0 (http://www.actiprosoftware.com).
    /// Generated code is based on input created by Actipro Software LLC.
    /// Copyright (c) 2001-2011 Actipro Software LLC.  All rights reserved.
    /// </remarks>
    public partial class CSharpClassificationTypeProvider : ICSharpClassificationTypeProvider {
        
        private IHighlightingStyleRegistry registryValue;
        
        private IClassificationType commentValue;
        
        private IClassificationType cSharpVerbatimStringValue;
        
        private IClassificationType identifierValue;
        
        private IClassificationType keywordValue;
        
        private IClassificationType numberValue;
        
        private IClassificationType operatorValue;
        
        private IClassificationType preprocessorKeywordValue;
        
        private IClassificationType stringValue;
        
        private IClassificationType xmlDocumentationCommentValue;
        
        private IClassificationType xmlDocumentationTagValue;
        
        /// <summary>
        /// Initializes a new instance of the <c>CSharpClassificationTypeProvider</c> class.
        /// </summary>
        public CSharpClassificationTypeProvider() : 
                this(null) {
        }
        
        /// <summary>
        /// Initializes a new instance of the <c>CSharpClassificationTypeProvider</c> class.
        /// </summary>
        /// <param name="targetRegistry">The <see cref="IHighlightingStyleRegistry"/> to use when registering classification types and highlighting styles.</param>
        public CSharpClassificationTypeProvider(IHighlightingStyleRegistry targetRegistry) {
            if ((targetRegistry != null)) {
                this.registryValue = targetRegistry;
            }
            else {
                this.registryValue = AmbientHighlightingStyleRegistry.Instance;
            }
        }
        
        /// <summary>
        /// Gets the <c>Comment</c> classification type.
        /// </summary>
        /// <value>The <c>Comment</c> classification type.</value>
        public IClassificationType Comment {
            get {
                if ((this.commentValue == null)) {
                    String key = "Comment";
                    this.commentValue = this.registryValue.GetClassificationType(key);
                    if ((this.commentValue == null)) {
                        this.commentValue = new ClassificationType(key, "Comment");
                        this.registryValue.Register(this.commentValue, new HighlightingStyle(new SolidColorBrush(Color.FromArgb(255, 0, 128, 0)), null, null, null, HighlightingStyleLineStyle.Default));
                    }
                }
                return this.commentValue;
            }
        }
        
        /// <summary>
        /// Gets the <c>CSharpVerbatimString</c> classification type.
        /// </summary>
        /// <value>The <c>CSharpVerbatimString</c> classification type.</value>
        public IClassificationType CSharpVerbatimString {
            get {
                if ((this.cSharpVerbatimStringValue == null)) {
                    String key = "CSharpVerbatimString";
                    this.cSharpVerbatimStringValue = this.registryValue.GetClassificationType(key);
                    if ((this.cSharpVerbatimStringValue == null)) {
                        this.cSharpVerbatimStringValue = new ClassificationType(key, "String (C# @ Verbatim)");
                        this.registryValue.Register(this.cSharpVerbatimStringValue, new HighlightingStyle(new SolidColorBrush(Color.FromArgb(255, 128, 0, 0)), null, null, null, HighlightingStyleLineStyle.Default));
                    }
                }
                return this.cSharpVerbatimStringValue;
            }
        }
        
        /// <summary>
        /// Gets the <c>Identifier</c> classification type.
        /// </summary>
        /// <value>The <c>Identifier</c> classification type.</value>
        public IClassificationType Identifier {
            get {
                if ((this.identifierValue == null)) {
                    String key = "Identifier";
                    this.identifierValue = this.registryValue.GetClassificationType(key);
                    if ((this.identifierValue == null)) {
                        this.identifierValue = new ClassificationType(key, "Identifier");
                        this.registryValue.Register(this.identifierValue, new HighlightingStyle());
                    }
                }
                return this.identifierValue;
            }
        }
        
        /// <summary>
        /// Gets the <c>Keyword</c> classification type.
        /// </summary>
        /// <value>The <c>Keyword</c> classification type.</value>
        public IClassificationType Keyword {
            get {
                if ((this.keywordValue == null)) {
                    String key = "Keyword";
                    this.keywordValue = this.registryValue.GetClassificationType(key);
                    if ((this.keywordValue == null)) {
                        this.keywordValue = new ClassificationType(key, "Keyword");
                        this.registryValue.Register(this.keywordValue, new HighlightingStyle(new SolidColorBrush(Color.FromArgb(255, 0, 0, 255)), null, null, null, HighlightingStyleLineStyle.Default));
                    }
                }
                return this.keywordValue;
            }
        }
        
        /// <summary>
        /// Gets the <c>Number</c> classification type.
        /// </summary>
        /// <value>The <c>Number</c> classification type.</value>
        public IClassificationType Number {
            get {
                if ((this.numberValue == null)) {
                    String key = "Number";
                    this.numberValue = this.registryValue.GetClassificationType(key);
                    if ((this.numberValue == null)) {
                        this.numberValue = new ClassificationType(key, "Number");
                        this.registryValue.Register(this.numberValue, new HighlightingStyle());
                    }
                }
                return this.numberValue;
            }
        }
        
        /// <summary>
        /// Gets the <c>Operator</c> classification type.
        /// </summary>
        /// <value>The <c>Operator</c> classification type.</value>
        public IClassificationType Operator {
            get {
                if ((this.operatorValue == null)) {
                    String key = "Operator";
                    this.operatorValue = this.registryValue.GetClassificationType(key);
                    if ((this.operatorValue == null)) {
                        this.operatorValue = new ClassificationType(key, "Operator");
                        this.registryValue.Register(this.operatorValue, new HighlightingStyle());
                    }
                }
                return this.operatorValue;
            }
        }
        
        /// <summary>
        /// Gets the <c>PreprocessorKeyword</c> classification type.
        /// </summary>
        /// <value>The <c>PreprocessorKeyword</c> classification type.</value>
        public IClassificationType PreprocessorKeyword {
            get {
                if ((this.preprocessorKeywordValue == null)) {
                    String key = "PreprocessorKeyword";
                    this.preprocessorKeywordValue = this.registryValue.GetClassificationType(key);
                    if ((this.preprocessorKeywordValue == null)) {
                        this.preprocessorKeywordValue = new ClassificationType(key, "Preprocessor Keyword");
                        this.registryValue.Register(this.preprocessorKeywordValue, new HighlightingStyle(new SolidColorBrush(Color.FromArgb(255, 0, 0, 255)), null, null, null, HighlightingStyleLineStyle.Default));
                    }
                }
                return this.preprocessorKeywordValue;
            }
        }
        
        /// <summary>
        /// Gets the <c>String</c> classification type.
        /// </summary>
        /// <value>The <c>String</c> classification type.</value>
        public IClassificationType String {
            get {
                if ((this.stringValue == null)) {
                    String key = "String";
                    this.stringValue = this.registryValue.GetClassificationType(key);
                    if ((this.stringValue == null)) {
                        this.stringValue = new ClassificationType(key, "String");
                        this.registryValue.Register(this.stringValue, new HighlightingStyle(new SolidColorBrush(Color.FromArgb(255, 128, 0, 0)), null, null, null, HighlightingStyleLineStyle.Default));
                    }
                }
                return this.stringValue;
            }
        }
        
        /// <summary>
        /// Gets the <c>XmlDocumentationComment</c> classification type.
        /// </summary>
        /// <value>The <c>XmlDocumentationComment</c> classification type.</value>
        public IClassificationType XmlDocumentationComment {
            get {
                if ((this.xmlDocumentationCommentValue == null)) {
                    String key = "XmlDocumentationComment";
                    this.xmlDocumentationCommentValue = this.registryValue.GetClassificationType(key);
                    if ((this.xmlDocumentationCommentValue == null)) {
                        this.xmlDocumentationCommentValue = new ClassificationType(key, "XML Doc Comment");
                        this.registryValue.Register(this.xmlDocumentationCommentValue, new HighlightingStyle(new SolidColorBrush(Color.FromArgb(255, 0, 128, 0)), null, null, null, HighlightingStyleLineStyle.Default));
                    }
                }
                return this.xmlDocumentationCommentValue;
            }
        }
        
        /// <summary>
        /// Gets the <c>XmlDocumentationTag</c> classification type.
        /// </summary>
        /// <value>The <c>XmlDocumentationTag</c> classification type.</value>
        public IClassificationType XmlDocumentationTag {
            get {
                if ((this.xmlDocumentationTagValue == null)) {
                    String key = "XmlDocumentationTag";
                    this.xmlDocumentationTagValue = this.registryValue.GetClassificationType(key);
                    if ((this.xmlDocumentationTagValue == null)) {
                        this.xmlDocumentationTagValue = new ClassificationType(key, "XML Doc Tag");
                        this.registryValue.Register(this.xmlDocumentationTagValue, new HighlightingStyle(new SolidColorBrush(Color.FromArgb(255, 128, 128, 128)), null, null, null, HighlightingStyleLineStyle.Default));
                    }
                }
                return this.xmlDocumentationTagValue;
            }
        }
        
        /// <summary>
        /// Gets the <see cref="IHighlightingStyleRegistry"/> to use when registering classification types and highlighting styles.
        /// </summary>
        /// <value>The <see cref="IHighlightingStyleRegistry"/> to use when registering classification types and highlighting styles.</value>
        public IHighlightingStyleRegistry Registry {
            get {
                return this.registryValue;
            }
        }
        
        /// <summary>
        /// Registers all classification types and highlighting styles with the <see cref="IHighlightingStyleRegistry"/> used by this class.
        /// </summary>
        /// <returns>The collection of <see cref="IClassificationType"/> objects that were registered.</returns>
        public IEnumerable<IClassificationType> RegisterAll() {
            return new IClassificationType[] {
                    Comment,
                    CSharpVerbatimString,
                    Identifier,
                    Keyword,
                    Number,
                    Operator,
                    PreprocessorKeyword,
                    String,
                    XmlDocumentationComment,
                    XmlDocumentationTag};
        }
    }
}
